home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1994 / MacHack 1994.toast / MacHack™94 / Hacks / [√] May be freely distributed / Peter Di Camillo / CW Enet Info / enet.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-25  |  7.2 KB  |  364 lines  |  [TEXT/MPS ]

  1. #include <MacHeaders68K>
  2.  
  3. #include <String.h>
  4. #include <Strings.h>
  5.  
  6. #define    NMENUS        3        /* number of defined menus */
  7. #define appleMenu    256
  8. #define    fileMenu    257
  9. #define editMenu    258
  10. #define fileMSize    3        /* size of File menu */
  11.  
  12. #define DEFAULTNUM    129        /* default resource number */
  13.  
  14. char done;                    /* true to exit program */
  15. char debug_mode;            /* debug mode flag */
  16.  
  17.                             /* screen control rectangles */
  18.                             /* variables for my window */
  19. MenuHandle myMenus[NMENUS];
  20. struct EventRecord myEvent;
  21. char da_menu;
  22. Rect screenRect;            /* rectangle defining screen */
  23. Rect dragRect;                /* rectangle defining bounds for dragging */
  24. Rect sizeRect;                /* rectangle for resizing windows */
  25. struct Point sfgpoint;        /* standard file dialog locations */
  26. struct Point sfppoint;
  27.  
  28. void macinit(void);
  29. void macend(void);
  30. void hndmac(void);
  31. void updevent(GrafPtr);
  32. void menu_upd(void);
  33. void docommand(long);
  34. void appl_menu(void);
  35. void aboutdlg(void);
  36. void ctrwindow(GrafPtr);
  37. void framedflt(DialogPtr);
  38.  
  39. /* In showerr.c: */
  40. void showerr(char * s);
  41. void ctralrt(short);
  42.  
  43. void getinfo(Boolean debug);
  44.  
  45. void main()
  46. {
  47. debug_mode = 0;
  48. macinit();                    /* initialize Mac */
  49. done = 0;
  50. while (!done) hndmac();        /* handle Mac events and I/O */
  51. macend();
  52. }
  53.  
  54. void macinit()
  55. {
  56. short i, bigscreen;
  57.  
  58.             /* set-up general Macintosh environment */
  59. MaxApplZone();                /* set-up for efficient storage use */
  60. for (i=0; i < 4; i++) MoreMasters();
  61. InitGraf(&qd.thePort);
  62. FlushEvents(everyEvent, 0);
  63. InitWindows();
  64. InitFonts();
  65. InitMenus();
  66. InitDialogs(0L);
  67. InitCursor();
  68. TEInit();
  69.  
  70.             /* set-up menus */
  71. for (i=0; i < NMENUS; i++) {
  72.     myMenus[i] = GetMenu(256+i);
  73.     InsertMenu(myMenus[i], 0);
  74.     }
  75. AddResMenu(myMenus[0], 'DRVR');    
  76. da_menu = 0;
  77. appl_menu();
  78.  
  79.             /* center alerts */
  80. ctralrt(256);
  81.  
  82. screenRect = qd.screenBits.bounds;
  83.  
  84. bigscreen = (((screenRect.bottom-screenRect.top) >= 480) &&
  85.              ((screenRect.right-screenRect.left) >= 640)); 
  86.  
  87.             /* calculate standard file dialog location*/
  88. sfppoint.h = (screenRect.right-screenRect.left-304)/2;
  89. sfgpoint.h = (screenRect.right-screenRect.left-348)/2;
  90. if (bigscreen) {
  91.     sfppoint.v = (screenRect.bottom-screenRect.top-184)/3;
  92.     sfgpoint.v = (screenRect.bottom-screenRect.top-200)/3;
  93.     }
  94. else {
  95.     sfppoint.v = (screenRect.bottom-screenRect.top-184)/2;
  96.     sfgpoint.v = (screenRect.bottom-screenRect.top-200)/2;
  97.     }
  98.  
  99. SetRect(&dragRect, 0, 24, screenRect.right-4, screenRect.bottom-4);
  100.  
  101. SetRect(&sizeRect, 50, 25, screenRect.right+1, screenRect.bottom+1);
  102. }
  103.  
  104. void macend()
  105. {
  106. }
  107.  
  108. void hndmac()
  109. {
  110. OSErr rc;
  111. short code;
  112. GrafPtr gp;
  113. unsigned short h, w;
  114. long l;
  115. WindowPtr whichWindow;
  116. struct WindowRecord * fw;
  117. char frontda;
  118.  
  119. rc = GetNextEvent(everyEvent, &myEvent);
  120. if (rc == 0)                        /* FALSE from GNE */
  121.     switch(myEvent.what) {
  122.         case nullEvent:
  123.                 fw = (WindowRecord *)FrontWindow();
  124.                 frontda = fw->windowKind < 0;
  125.                 if (frontda) {
  126.                     if (!da_menu) {
  127.                         da_menu = 1;
  128.                         SetItem(myMenus[1], fileMSize, "\pClose");
  129.                         appl_menu();
  130.                         }
  131.                     }
  132.                 else {
  133.                     if (da_menu) {
  134.                         da_menu = 0;
  135.                         SetItem(myMenus[1], fileMSize, "\pQuit");
  136.                         appl_menu();
  137.                         }
  138.                     }
  139.                 SystemTask();    /* run DAs, etc. */
  140.                 break;
  141.         default:
  142.                 return;
  143.         }
  144. else switch(myEvent.what) {            /* TRUE from GNE */
  145.         case mouseDown:
  146.             code = FindWindow(myEvent.where, &whichWindow);
  147.             switch (code) {
  148.             case inMenuBar:
  149.                 menu_upd();
  150.                 docommand(MenuSelect(myEvent.where));
  151.                 break;
  152.             case inSysWindow:
  153.                 SystemClick((EventRecord *)&myEvent, whichWindow);
  154.                 break;
  155.             case inDrag:
  156.                 if (whichWindow == FrontWindow())
  157.                     DragWindow(whichWindow, myEvent.where, (Rect *)&dragRect);
  158.                 else SelectWindow(whichWindow);
  159.                 break;
  160.             case inGoAway:
  161.                 break;
  162.             case inGrow:
  163.                 if (whichWindow == FrontWindow()) {
  164.                     GetPort(&gp);
  165.                     SetPort((GrafPtr)whichWindow);
  166.                     l = GrowWindow(whichWindow, myEvent.where, (Rect *)&sizeRect);
  167.                     h = l >> 16;
  168.                     w = l & 0x0000ffffL;
  169.                     SizeWindow(whichWindow, w, h, 0x100);
  170.                     SetPort(gp);
  171.                     }
  172.                 break;
  173.             case inContent:
  174.                 if (whichWindow != FrontWindow()) {
  175.                     SelectWindow(whichWindow);
  176.                     break;
  177.                     }
  178.                 break;
  179.  
  180.             case inZoomIn:
  181.             case inZoomOut:
  182.                 if (TrackBox(whichWindow, myEvent.where, code)) {
  183.                     if (((WindowPeek)whichWindow)->dataHandle == 0) break;
  184.                     GetPort(&gp);
  185.                     SetPort((GrafPtr)whichWindow);
  186.                     EraseRect(&(((WindowRecord *)whichWindow)->port.portRect));
  187.                     ZoomWindow(whichWindow, code, 0);
  188.                     SetPort(gp);
  189.                     }
  190.                 break;
  191.  
  192.             default:
  193.                 break;
  194.             }
  195.             break;
  196.  
  197.         case mouseUp:
  198.             break;
  199.  
  200.         case keyDown:
  201.         case autoKey:
  202.             break;
  203.  
  204.         case activateEvt:
  205.             break;
  206.  
  207.         case updateEvt:
  208.             updevent((GrafPtr)myEvent.message);
  209.             break;
  210.  
  211.         case app4Evt:
  212.             break;
  213.  
  214.         default:    break;
  215.         }
  216. }
  217.  
  218. void updevent(GrafPtr msgptr)
  219. {
  220. GrafPtr gp;
  221.  
  222. GetPort(&gp);
  223. SetPort(msgptr);
  224. BeginUpdate(msgptr);
  225. EndUpdate(msgptr);
  226. SetPort(gp);
  227. }
  228.  
  229. void menu_upd()
  230. {
  231. short i;
  232.  
  233. if (da_menu) {
  234.     for (i = 1; i < fileMSize; i++)
  235.         DisableItem(myMenus[1], i);
  236.     CheckItem(myMenus[1], fileMSize, 0);
  237.     }
  238. else {
  239.     CheckItem(myMenus[1], fileMSize, done << 8);
  240.     }
  241. }
  242.  
  243. void docommand(long mResult)
  244. {
  245. register short theItem, theMenu;
  246. unsigned char name[40];
  247. WindowRecord * fw;
  248. short i;
  249. static char nullstr[1] = {0};
  250. OSErr readmap();
  251.  
  252. theMenu = mResult >> 16;
  253. theItem = mResult & 0xff;
  254. switch(theMenu) {
  255.     case appleMenu:
  256.         if (theItem == 2) break;
  257.         if (theItem == 1) {
  258.             aboutdlg();
  259.             break;
  260.             }
  261.         GetItem(myMenus[0], theItem, name);
  262.         OpenDeskAcc(name);
  263.         break;
  264.     case fileMenu:
  265.         switch (theItem) {
  266.             case 1:
  267.                     debug_mode ^= 1;
  268.                     CheckItem(myMenus[1], 1, debug_mode);
  269.                     break;
  270.             case 2:
  271.                     getinfo(debug_mode);
  272.                     break;
  273.             case 3:
  274.                     if (!da_menu) {
  275.                         done ^= 1;
  276.                         break;
  277.                         }
  278.                     else {
  279.                         fw = (WindowRecord *)FrontWindow();
  280.                         i = fw->windowKind;
  281.                         if (i<0) CloseDeskAcc(i);
  282.                         }
  283.             default: break;
  284.             }
  285.         break;
  286.     case editMenu:
  287.         SystemEdit(theItem-1);
  288.         break;
  289.     default:
  290.         break;
  291.     }
  292.     HiliteMenu(0);
  293.     appl_menu();
  294. }
  295.  
  296. void appl_menu()        /* enable correct application menus */
  297. {
  298. static char last_da = 2;    /* init to invalid value */
  299.  
  300. /* skip drawing menu if no changes from last time */
  301. if (last_da == da_menu) return;
  302. last_da = da_menu;        /* save values for next time */
  303.  
  304. if (da_menu) {
  305.     EnableItem(myMenus[2], 0);
  306.     }
  307. else {
  308.     DisableItem(myMenus[2], 0);
  309.     }
  310. DrawMenuBar();
  311. }
  312.  
  313. void aboutdlg()
  314. {
  315. DialogPtr dlgptr;
  316. short itemHit;
  317. unsigned char **version;
  318. static unsigned char nullstr[1] = {0};
  319.  
  320. version = (unsigned char **)GetResource('EINF', 1);
  321. if (version == 0L) {
  322.     return;
  323.     }
  324. dlgptr = GetNewDialog(257, (Ptr)0L, (WindowPtr)-1L);
  325. ctrwindow(dlgptr);
  326. ParamText(*version, nullstr, nullstr, nullstr);
  327. ShowWindow(dlgptr);
  328.  
  329. /* frame the default selection */
  330. framedflt(dlgptr);
  331.  
  332. ModalDialog(0L, &itemHit);
  333. DisposDialog(dlgptr);
  334. ParamText(nullstr, nullstr, nullstr, nullstr);
  335. }
  336.  
  337. void ctrwindow(GrafPtr wp)
  338. {
  339. short scrhsize, scrvsize;
  340. short whsize, wvsize;
  341.  
  342. scrhsize = qd.screenBits.bounds.right - qd.screenBits.bounds.left;
  343. scrvsize = qd.screenBits.bounds.bottom - qd.screenBits.bounds.top;
  344. whsize = wp->portRect.right-wp->portRect.left;
  345. wvsize = wp->portRect.bottom - wp->portRect.top;
  346. MoveWindow(wp, (scrhsize-whsize)/2, (scrvsize-wvsize)/3, 0);
  347. }
  348.  
  349. void framedflt(DialogPtr dlgptr)
  350. {
  351. short gtype;
  352. Handle gitem;
  353. Rect gbox;
  354. GrafPtr gp;
  355.  
  356. GetDItem(dlgptr, 1, >ype, &gitem, &gbox);
  357. GetPort(&gp);
  358. SetPort(dlgptr);
  359. PenSize(3,3);
  360. InsetRect(&gbox, -4, -4);
  361. FrameRoundRect(&gbox, 16, 16);
  362. SetPort(gp);
  363. }
  364.